非类型模板参数(Nontype Template Parameters)

您所在的位置:网站首页 template parameters 非类型模板参数(Nontype Template Parameters)

非类型模板参数(Nontype Template Parameters)

2024-05-30 09:59| 来源: 网络整理| 查看: 265

对于函数模板和类模板,模板参数不一定必须是类型,也可是是常规的数值。当以类型(type)作为模板参数的时候,代码中未决定的是类型;当以一般的数字(non-type)作为模板参数的时候,代码中待定的内容便是某些数值。使用者这种模板必须要显示指定数值,模板才能实例化。

1、非类型类模板参数(Nontype Class Template Parameters)

之前章节中的列子中Stack类中使用vector或deque来存储元素。我们也可以使用一个固定大小的数值来存储元素。这么做的好处是在定义一个Stack对象的时候就分配了固定大小的内存空间,之后的元素操作就不再需要内存分配管理了。坏处是这个数值固定大小的设置比较困难,如果设置太小很数组容易满;如果设置太大又浪费内存空间。 一个可行方法是让使用者自己定义数组的最大空间。 如下:

// basics/stack4.hpp #include template class Stack { private: T elems[MAXSIZE]; // elements int numElems; // current number of elements public: Stack(); // constructor void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return numElems == 0; } bool full() const { // return whether the stack is full return numElems == MAXSIZE; } }; // constructor template Stack::Stack () : numElems(0) // start with no elements { // nothing else to do } template void Stack::push (T const& elem) { if (numElems == MAXSIZE) { throw std::out_of_range("Stack::push(): stack is full"); } elems[numElems] = elem; // append element ++numElems; // increment number of elements } template void Stack::pop () { if (numElems


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3